using Microsoft.AspNetCore.Mvc;

namespace 工厂模式.Controllers
{
    [ApiController]
    [Route("[controller]/[action]")]
    public class WeatherForecastController : ControllerBase
    {
        [HttpGet]
        public Fruit GetFryut(string Name)
        {
            //调用水果工厂，输入想要的水果名称获取对应的水果产品
            FruitsFactory factory = new FruitsFactory();
            return factory.Create(Name);
        }

        //抽象工厂
        //抽象工厂很好的发挥了开闭原则，依赖倒置原则,使用工厂模式，替换具体工厂时只需要修改一行代码
        //抽象工厂模式太重，如果抽象工厂IFacotry需要新增功能，会影响到所有的具体工厂类
        //抽象工厂模式适用于增加同类工厂这样的横向扩展需求，不适合新增功能这样的纵向扩展
        [HttpGet]
        public Fruit GetFruit()
        {
            IFactory factory = new PearFactory();
            return factory.Create();
        }
    }
}